c++ - Qt Release build 给出 MSVC++ Runtime Library Error
全部标签 我在我的项目中使用了STL容器,我发现了一个我无法解释的奇怪错误。让我们考虑以下代码:#include#includeintmain(intargc,char**argv){std::vectorvec;vec.resize(5,false);std::cout这按预期输出0,但如果我使用drmemory运行内存检查,它会发现未初始化的读取。有人可以帮助理解这种行为吗?平台:win32;编译器:mingw32-gcc4.7.2;Drmemory1.6.0-构建2 最佳答案 std::vector是一个奇怪的小东西,使用位来实现它的目
metaquestion建议c++98和c++03标签应该是同义词。提问者跟进了IsvalueinitializationpartoftheC++98standard?Ifnot,whywasitaddedintheC++03standard?,一个很好的问题,它阐明了向C++03添加值初始化。将此问题视为后者的后续问题。OP断言现代编译器不会费心区分C++98和C++03。这让我感到惊讶,因为事实证明是三个现代编译器的情况。虽然这个问题可以归结为“RTFM”,但我的搜索没有找到任何结论。海湾合作委员会他们的standards页:TheoriginalISOC++standardwas
给出这个例子:std::vectornumbers={5,6,7};//sizeis3inti=-1;std::cout基本上在两个语句中improcessing-1%3但编译器输出不同的数字。我不明白这个结果,也许有人可以向我解释一下。编辑作为@Chris、@KeithThompson@AnT建议的片段std::cout::max()%3打印预期的输出。感谢大家的宝贵建议! 最佳答案 i%3是您所期望的,自C++11以来,它定义了语义而不是实现定义的(如果我没记错的话)结果。numbers.size()具有无符号类型(std::s
这个问题在这里已经有了答案:Referencetofunctionisambiguous[duplicate](2个答案)关闭6年前。我正在重载函数add(),但是当我使用float数据类型时它显示错误。但是,当我将其更改为double时,它工作正常。为什么float会导致错误?代码是:#includeusingnamespacestd;classstudents{private:inti;floatf;public:voidadd(intb){i=b;cout错误:Infunction'intmain()':[Error]callofoverloaded'add(double)'is
运行以下代码#include#defineFOO#defineBARdefined(FOO)intmain(){#ifBARstd::cout在VisualStudio显示Bardisabled!,同时在gcc中运行相同的代码或clang显示Barenabled!。这是Microsoft编译器中的错误吗?根据标准,什么是正确的? 最佳答案 根据标准,这是未定义的行为。[cpp.cond],强调我的Priortoevaluation,macroinvocationsinthelistofpreprocessingtokensthatw
在我的代码中,我有一个名为membrane的类,其中有一个名为exciteMod()的函数,一个名为decide()的函数和一个变量命名为delta_U。exciteMod()的第一行是this->delta_U=0。在decide()中,我有一个指数-delta_U(exp(-this->delta_U))。这会导致错误Useofuninitialisedvalueofsize8。这可能是什么原因造成的?我没有关于在valgrind中生成的delta_U的任何错误。编辑:以下是代码的相关部分:voidmembrane::exciteMod(){this->delta_U=0;/*Do
sprintf_s(buf,"%.*f",14,0.182696884245135);在VS2008中=0.18269688424514在VS2015中=0.18269688424513sprintf_s的行为是否改变了?我怎样才能得到旧的行为? 最佳答案 我们为theUniversalCRT重写了浮点解析器和格式化程序和VisualC++2015以提高正确性。查看BreakingChangesinVisualC++VisualC++2015文档;有一节标题为“浮点格式和解析”。VisualC++2015结果是正确舍入的结果。输入字
我在C++结构中重载了const和non-const函数。然后,我运行了该程序,我想知道它运行良好,没有出现模棱两可的错误。#includestructSt{intf()const{return1;}intf(){return2;}}s;intmain(){intret=s.f();std::cout所以,我只是想知道,为什么编译器不对“const”和“not-const”函数给出模棱两可的错误? 最佳答案 这是constoverloading,即athing在C++中。在这种情况下,编译器确定该结构没有重载函数返回类型(当然是di
有时我的C++程序在Debug模式下崩溃,我得到的是一个消息框,提示某些内部内存管理例程(访问未分配的内存等)中的断言失败。但我不知道那是从哪里调用的,因为我没有得到任何堆栈跟踪。我如何获取堆栈跟踪或至少查看它在我的代码中失败的位置(而不是库/内置例程)? 最佳答案 如果发生崩溃,无论您使用的是调试版本还是发布版本,都可以获得有关崩溃发生位置的信息。即使您在没有源代码的计算机上,也可以看到调用堆栈。为此,您需要使用通过EXE构建的PDB文件。将PDB文件放在与崩溃的EXE相同的目录中。注意:即使您拥有相同的源代码,构建两次并使用第一
你好,祝你有美好的一天。以下代码片段在cl.exe(15.00.30729.01)和mingw-g++(4.4.0)上编译:templateclassTest{public:Tt;voiderror(){intdoesNotExist=6;returndoesNotExist;//test;return0;}另外,在cl.exe上你甚至可以逃避这样的事情:templateclassTest{public:Tt;voiderror(){doesNotExist=6;//现在,这显然会发生,因为编译器不会为模板类的方法创建内容,直到有人调用它们。但是,当您设计大型模板类时,这可能会带来问题